ECRリポジトリにプッシュしたイメージをECS Fargateで起動する
こんにちは!コンサル部のinomaso(@inomasosan)です。
今回はDockerfileから作成したイメージをECRにプッシュし、ECS Fargateでコンテナ起動を試していきます。
環境
今回実行した環境は以下の通りです。
- macOS Big Sur 11.6
- Docker Desktop 4.0.0
Dockerfileからイメージ作成
Dockerfile作成
今回はApacheに静的コンテンツを追加したイメージを作成します。
とりあえず表示できれば良いので、適用なHTMLファイルを作成します。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>test</title> </head> <body> <h1>どうもinomasoです!</h1> </body> </html>
次にDockerfile
を作成します。
ベースイメージのApacheにローカルで作成したinomaso.html
をコピーするよう記述します。
ちなみに、Dockerfileとinomaso.htmlは同じディレクトリに作成しています。
FROM httpd:2.4 COPY ./inomaso.html /usr/local/apache2/htdocs/
コンテナイメージ作成
元となるファイルは作成できたのでコンテナイメージを作成します。
上記ファイルのあるフォルダに移動し、以下のコマンドでmy-apache
という名前のイメージが作成されます。
% docker build -t my-apache .
以下のコマンドでイメージが作成されたことを確認します。
% docker image ls | grep my-apache
ローカル環境で確認
ちゃんと想定通りに作成できた確認するために、ローカル環境で実行します。
今回は1回限りの実行で十分なので、コンテナの終了時に自動的にコンテナをクリーンアップし、ファイルシステムを削除するようにします。
% docker run --rm -p 80:80 my-apache
コンテナを起動できたら、Chrome等のWebブラウザにてhttp://localhost/inomaso.html
へアクセスし、どうもinomasoです!と表示されることを確認します。
ECRにコンテナイメージをプッシュ
ECRプライベートリポジトリ作成
AWSマネージメントコンソールのECSコンソールから、Amazon ECR
→リポジトリ
をクリックします。
今回はイメージを誰でも利用できないように、IAMを利用して制御するプライベートリポジトリで作成します。
プライベートタブが選択されていることを確認し、リポジトリを作成
をクリックします。
リポジトリの可視性にプライベート
がチェックされていることを確認し、リポジトリ名に適当な名前を入力します。
リポジトリにコンテナイメージプッシュ
先ほど作成したリポジトリを開き、プッシュコマンドの表示
をクリックします。
プッシュコマンドの例が表示されるので、参考にしてコマンドを実行していきます。
まずはDockerクライアントの認証を実行します。
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin [ACCOUNT ID].dkr.ecr.ap-northeast-1.amazonaws.com
コンテナイメージは既に作成済みのため、リポジトリにイメージをプッシュするためにタグをつけます。
docker tag my-apache:latest [ACCOUNT ID].dkr.ecr.ap-northeast-1.amazonaws.com/my-image:latest
ECRリポジトリにコンテナイメージをプッシュします。
docker push [ACCOUNT ID].dkr.ecr.ap-northeast-1.amazonaws.com/my-image:latest
AWSマネージメントコンソールに戻り、該当イメージがプッシュされたことの確認します。
またECSのコンテナ定義で使用する、イメージURIをメモしておきます。
ECS Fargateでコンテナ起動
ECS FargateでECRリポジトリのイメージからコンテナ起動
ECS Fargateの設定について、コンテナ定義のイメージ指定以外は、下記ブログをご参照願います。
コンテナ定義のイメージ指定については、先ほどメモしたイメージURI
を指定します。
Apache表示確認
タスクのパブリックIPを確認し、Chrome等のWebブラウザにてhttp://タスクのパブリックIP/inomaso.html
へアクセスし、どうもinomasoです!と表示されることを確認します。
まとめ
Dockerfileから作成したイメージをECRにプッシュし、ECS Fargateで動かすことができました。 ちょっとずつECS関連の機能を試して理解を深めていこうと思います、
この記事が、どなたかのお役に立てば幸いです。それでは!